package com.steven.concurrency.example.jihetongbu;

import com.steven.concurrency.annoations.NotThreadSafe;

import java.util.Iterator;
import java.util.Vector;

/**
 */
@NotThreadSafe
public class VectorExam3 {

    /**
     * 在进行迭代操作的时候不要进行修改操作
     * 解决方案:标记需要修改的位置，然后在迭代完成之后进行修改
     * @param v1
     */
    //java.util.ConcurrentModificationException
    public static void test1(Vector<Integer> v1){
        for (Integer i: v1) {
            if(i.equals(3)){
                v1.remove(i);
            }
        }
    }
    //java.util.ConcurrentModificationException
    public static void test2(Vector<Integer> v1){
        Iterator<Integer> itre = v1.iterator();
        while (itre.hasNext()){
           Integer i= itre.next();
           if(i.equals(3)){
               v1.remove(i);
           }
        }

    }
    //success
    public static void test3(Vector<Integer> v1){
        for (int i = 0; i <v1.size() ; i++) {
            if(i==3){
                v1.remove(i);
            }
        }
    }


    public static void main(String[] args) {
        Vector<Integer> list = new Vector<>();
        list.add(1);
        list.add(2);
        list.add(3);
        test1(list);

    }
}
